package commons.drawing.couche;

import commons.drawing.I_Drawable;
import commons.ihm.ParametresAffichageCarto;
import commons.utils.primitive_geom.Point_d;
import commons.utils.primitive_geom.Rect_d;
import java.awt.Graphics2D;
import java.util.ArrayList;


/**
 * Couche affichée dans la TOC du panel Cartographie.
 * Une couche est une simple classe qui renvoit des IDrawable dans un rectangle donné
 */
public interface I_Couche {

	public String getName();

	// Dessine la couche dans g, avec les paramètres pac et limitée à rectVisu
	public void draw (Graphics2D g, ParametresAffichageCarto pac, Rect_d rectVisu);

	// Créée une sélection basée sur un point et avec une tolérance
	public void select (Point_d pt_m, double tolerance_m);

	// Créée une sélection basée sur la recherche selon un pattern
	public void select (String pattern);

	// Créée une sélection contenant des objets de vObj
	//  (attention, vObj peut contenir n'importe quoi et donc des objets qui ne sont pas dans la couche)
	public void select (ArrayList<I_Drawable> vObj);

	public void clearSelection();

//	// Créée une sélection basée sur une liste d'objet
//	public void select (ArrayList<I_Drawable> vObjectToSelect);

	public ArrayList<I_Drawable> search (String pattern);

	// Recherche les I_Drawable correspondant aux objects fournis en entrée
	//  il se peut que certains objets fournis ne fassent pas partie de la couche
	// => ne renvoie que les objets effectivement contenus dans la couche
	public ArrayList<I_Drawable> search (ArrayList<I_Drawable> vObjectToSearch);

	// Renvoit une sélection précalculée au préalable (à l'aide de select())
	public ArrayList<I_Drawable> getSelection();

}
